// Created by yoake on 2023-09-17.
//
#pragma once
#include <stdlib.h>
#include <stdio.h>
#include <stdarg.h>

typedef struct LNode{
    int data;           // 数据域
    struct LNode *next; // 指针域
} LNode, *LinkList;

int InitList(LinkList *L) // 初始化单链表
{
    *L = (LNode *)malloc(sizeof(LNode)); // 分配一个头节点
    if (*L == NULL)
        return 0; // 内存不足，分配失败
    (*L)->next = NULL; // 头节点之后还没有节点
    return 1;
}

// 尾部插入元素
void InsertElem(LinkList L, int data){
    LNode *p = L;
    while (p->next != NULL)
    {
        p = p->next;
    }
    LNode *q = (LNode *)malloc(sizeof(LNode));
    q->data = data;
    q->next = NULL;
    p->next = q;
}

void InsertElements(LinkList L,int count, ...) {
    va_list args;
    va_start(args, count);
    for (int i = 0; i < count; i++) {
        InsertElem(L,va_arg(args, int));
    }
    va_end(args);
}

void PrintList(LinkList L)
{
    LNode *p = L->next;
    while (p != NULL)
    {
        printf("%d ", p->data);
        p = p->next;
    }
    printf("\n");
}